package com.ruoyi.common.domain.dto;

import com.ruoyi.common.domain.Orders;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class OrderDTO {

    /**
     * 订单编号 唯一标识 (生成规则我还没想清楚)
     */
    private String orderNo;

    /**
     * 订单当前状态
     * 状态枚举 {@linkplain Orders.CURRENT_TYPE}
     */
    private String currentStatus;
    private String currentStatusDESC;

    public String getCurrentStatusDESC() {
        return Orders.CURRENT_TYPE.fromValue(currentStatus).getDesc();
    }

    /**
     * 是否需要评论
     * 评论判断枚举 {@linkplain Orders.WHETHER_COMMENT}
     */
    private String whetherComment;
    private String whetherCommentDesc;

    public String getWhetherCommentDESC() {
        return Orders.WHETHER_COMMENT.fromValue(whetherComment).getDesc();
    }

    /**
     * 订单创建时间
     */
    private LocalDateTime createdAt;

    /**
     * 商户头像
     */
    private String avatarUrl;

    /**
     * 商户名称
     */
    private String merchantName;

    /**
     * 平台Id
     */
    private Long platformId;
    /**
     * 平台名称
     */
    private String platformName;


    /**
     * 最小满减金额
     */
    private BigDecimal minOrderAmount;

    /**
     * 满减折扣金额
     */
    private BigDecimal discountAmount;

    /**
     * 商户活动费用
     */
    private String merchantActivityFee;

    /**
     * 按钮
     */
    private List<Button> buttonGroup;

    public List<Button> getButtonGroup() {
        return Button.getButtonGrope(Orders.CURRENT_TYPE.fromValue(currentStatus));
    }

    /**
     * 小程序跳转地址
     */
    private String miniProgramAddress;
    @AllArgsConstructor
    @NoArgsConstructor
    @Data
    @Builder
    static class Button {

        private String name;
        private String value;


        public static List<Button> getButtonGrope(Orders.CURRENT_TYPE orderType) {
            List<Button> buttonGrope = new ArrayList<>();
            switch (orderType) {
                case NO_PAY:
                    buttonGrope = new ArrayList<>() {{
                        add(Button.builder()
                                .name("取消订单")
                                .value("CANCEL")
                                .build()
                        );
                        add(Button.builder()
                                .name("进店下单")
                                .value("ENTER_STORE")
                                .build()
                        );
                        add(Button.builder()
                                .name("去支付")
                                .value("TO_PAY")
                                .build()
                        );
                    }};
                    break;
                case WAITING_COMMENT:
                    buttonGrope = new ArrayList<>() {{
                        add(Button.builder()
                                .name("取消订单")
                                .value("CANCEL")
                                .build()
                        );
                        add(Button.builder()
                                .name("进店下单")
                                .value("ENTER_STORE")
                                .build()
                        );
                        add(Button.builder()
                                .name("上传凭证")
                                .value("UPLOAD_VOUCHER")
                                .build()
                        );
                    }};
                    break;
                case REVIEW_REJECT:
                    buttonGrope = new ArrayList<>() {{
                        add(Button.builder()
                                .name("重新上传凭证")
                                .value("UPLOAD_VOUCHER")
                                .build()
                        );
                    }};
                    break;
                default:
                    //默认返回空的按钮 不显示即可
                    break;


            }
            return buttonGrope;
        }




    }
}


